package com.dragon.modules.yuegou.model.coupon;

import com.dragon.modules.yuegou.entity.coupon.CouponEntity;
import com.dragon.modules.yuegou.enums.OwnerType;
import com.dragon.modules.yuegou.enums.coupon.CouponPlatform;
import com.dragon.modules.yuegou.enums.coupon.CouponType;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券（会员的优惠券，不冗余优惠券模板信息，请使用1+N模式查询）模型类
 * 
 * @author pbuilder generated
 * @date 2019-02-28 18:30:17
 * @company sgy
 * @version 2.0
 * @see Length 长度限制
 * @see NotNull 对象非空
 * @see NotEmpty 字符串、集合、表、数组非空
 */
public class Coupon extends CouponEntity {

	@ApiModelProperty("优惠券模板")
	private CouponTemplate couponTemplate;

	@ApiModelProperty("实际折扣金额")
	private BigDecimal discountAmount;

	@ApiModelProperty("默认选择")
	private Integer defaultSelect = 0;
	
	@Override
	public BigDecimal getReductionMount() {
		return reductionMount;
	}
	
	@Override
	public void setReductionMount(BigDecimal reductionMount) {
		this.reductionMount = reductionMount;
	}
	
	public Integer getDefaultSelect() {
		return defaultSelect;
	}

	public void setDefaultSelect(Integer defaultSelect) {
		this.defaultSelect = defaultSelect;
	}

	public CouponTemplate getCouponTemplate() {
		return couponTemplate;
	}

	public void setCouponTemplate(CouponTemplate couponTemplate) {
		this.couponTemplate = couponTemplate;
	}

	public BigDecimal getDiscountAmount() {
		return discountAmount;
	}

	public void setDiscountAmount(BigDecimal discountAmount) {
		this.discountAmount = discountAmount;
	}

	/**
	 * 构造一个空优惠券（会员的优惠券，不冗余优惠券模板信息，请使用1+N模式查询）模型对象
	 */
	public Coupon() {
		super();
	}

	/**
	 * 依据实体对象的信息构造一个优惠券（会员的优惠券，不冗余优惠券模板信息，请使用1+N模式查询）模型对象
	 * 
	 * @param entity
	 *            实体对象
	 */
	public Coupon(CouponEntity entity) {
		super(entity);
	}

	/**
	 * 依据其它对象的信息构造一个优惠券（会员的优惠券，不冗余优惠券模板信息，请使用1+N模式查询）模型对象
	 * 
	 * @param other
	 *            其它对象
	 */
	public Coupon(Coupon other) {
		super(other);
	}

	@Override
	public String getId() {
		return id;
	}

	/**
	 * 设置优惠券ID
	 * 
	 * @param id
	 *            优惠券ID
	 * @return 当前对象
	 */
	public Coupon id(String id) {
		this.id = id;
		return this;
	}

	@Override
	public OwnerType getOwnerType() {
		return ownerType;
	}

    /**
	 * 设置[全局枚举]所有者类型(把优惠券交给会员之前的所有者)：0-平台-PLATFORM、1-集团-GROUP、2-商圈-BUSINESS_DISTRICT、3-商户-MERCHANT
	 * 
	 * @param ownerType [全局枚举]所有者类型(把优惠券交给会员之前的所有者)：0-平台-PLATFORM、1-集团-GROUP、2-商圈-BUSINESS_DISTRICT、3-商户-MERCHANT
	 * @return 当前对象
	 */
	public Coupon ownerType(OwnerType ownerType) {
		this.ownerType = ownerType;
		return this;
	}

	@Override
	public String getGroupId() {
		return groupId;
	}

	/**
	 * 设置集团ID
	 * 
	 * @param groupId
	 *            集团ID
	 * @return 当前对象
	 */
	public Coupon groupId(String groupId) {
		this.groupId = groupId;
		return this;
	}

	@Override
	public String getBusdId() {
		return busdId;
	}

	/**
	 * 设置商圈ID
	 * 
	 * @param busdId
	 *            商圈ID
	 * @return 当前对象
	 */
	public Coupon busdId(String busdId) {
		this.busdId = busdId;
		return this;
	}

	@Override
	public String getMerchantId() {
		return merchantId;
	}

	/**
	 * 设置商户ID
	 * 
	 * @param merchantId
	 *            商户ID
	 * @return 当前对象
	 */
	public Coupon merchantId(String merchantId) {
		this.merchantId = merchantId;
		return this;
	}

	@Override
	public String getMemberId() {
		return memberId;
	}

	/**
	 * 设置会员ID
	 * 
	 * @param memberId
	 *            会员ID
	 * @return 当前对象
	 */
	public Coupon memberId(String memberId) {
		this.memberId = memberId;
		return this;
	}

	@Override
	public String getCouponTemplateId() {
		return couponTemplateId;
	}

	/**
	 * 设置优惠券模板ID
	 * 
	 * @param couponTemplateId
	 *            优惠券模板ID
	 * @return 当前对象
	 */
    public Coupon couponTemplateId(String couponTemplateId) {
    	this.couponTemplateId = couponTemplateId;
    	return this;
    }

    @Override
    public String getCouponTemplateRandomId() {
    	return couponTemplateRandomId;
    }
    
    public Coupon couponTemplateRandomId(String couponTemplateRandomId) {
    	this.couponTemplateRandomId = couponTemplateRandomId;
    	return this;
    }
    
	@Override
	public CouponType getType() {
    	return type;
    }

    /**
	 * 设置[枚举]优惠券类型：0-停车券-PARK
	 * 
	 * @param type [枚举]优惠券类型：0-停车券-PARK
	 * @return 当前对象
	 */
    public Coupon type(CouponType type) {
    	this.type = type;
    	return this;
    }

	@Override
	public Boolean getUsed() {
		return used;
	}

	/**
	 * 设置是否已使用（1：已使用、0：未使用）
	 * 
	 * @param used 是否已使用（1：已使用、0：未使用）
	 * @return 当前对象
	 */
    public Coupon used(Boolean used) {
    	this.used = used;
    	return this;
    }

	@Override
	public LocalDateTime getUseTime() {
    	return useTime;
    }

    /**
	 * 设置使用时间
	 * 
	 * @param useTime 使用时间
	 * @return 当前对象
	 */
    public Coupon useTime(LocalDateTime useTime) {
    	this.useTime = useTime;
    	return this;
    }

	@Override
	public Boolean getExpired() {
		return expired;
	}

	/**
	 * 设置是否已失效（1：已失效、0：未失效）
	 * 
	 * @param expired
	 *            是否已失效（1：已失效、0：未失效）
	 * @return 当前对象
	 */
	public Coupon expired(Boolean expired) {
		this.expired = expired;
		return this;
	}

	@Override
	public LocalDateTime getExpireTime() {
		return expireTime;
	}

	/**
	 * 设置失效时间（到期或标记为失效都算失效，标记为没失效并且没到期才算有效）
	 * 
	 * @param expireTime
	 *            失效时间（到期或标记为失效都算失效，标记为没失效并且没到期才算有效）
	 * @return 当前对象
	 */
	public Coupon expireTime(LocalDateTime expireTime) {
		this.expireTime = expireTime;
		return this;
	}

	@Override
	public LocalDateTime getCreatedTime() {
		return createdTime;
	}

	/**
	 * 设置创建时间
	 * 
	 * @param createdTime
	 *            创建时间
	 * @return 当前对象
	 */
	public Coupon createdTime(LocalDateTime createdTime) {
		this.createdTime = createdTime;
		return this;
	}

	@Override
	public CouponPlatform getPlatform() {
		return platform;
	}

    /**
	 * 设置[枚举]来源平台：0-电脑-PC、1-苹果手机-IOS、2-安卓手机-ANDROID、3-微信-WECHAT、4-其它-OTHER
	 * 
	 * @param platform [枚举]来源平台：0-电脑-PC、1-苹果手机-IOS、2-安卓手机-ANDROID、3-微信-WECHAT、4-其它-OTHER
	 * @return 当前对象
	 */
	public Coupon platform(CouponPlatform platform) {
		this.platform = platform;
		return this;
	}

	@Override
	public String getSource() {
		return source;
	}

    /**
	 * 设置自定义来源（例如：2018双节活动扫码、2018双节活动红包雨、2018年货节赠送、2019元宵节赠送等等）
	 * 
	 * @param source 自定义来源（例如：2018双节活动扫码、2018双节活动红包雨、2018年货节赠送、2019元宵节赠送等等）
	 * @return 当前对象
	 */
	public Coupon source(String source) {
		this.source = source;
		return this;
	}

	@Override
	public String getCouponPackageId() {
		return couponPackageId;
	}

	/**
	 * 设置券包ID（优惠券来自券包时存在）
	 * 
	 * @param couponPackageId
	 *            券包ID（优惠券来自券包时存在）
	 * @return 当前对象
	 */
	public Coupon couponPackageId(String couponPackageId) {
		this.couponPackageId = couponPackageId;
		return this;
	}

	@Override
	public String getCouponPackageTemplateId() {
		return couponPackageTemplateId;
	}

	/**
	 * 设置券包模板ID（冗余）
	 * 
	 * @param couponPackageTemplateId
	 *            券包模板ID（冗余）
	 * @return 当前对象
	 */
    public Coupon couponPackageTemplateId(String couponPackageTemplateId) {
    	this.couponPackageTemplateId = couponPackageTemplateId;
    	return this;
    }

	@Override
	public String getOrderNo() {
    	return orderNo;
    }

    /**
	 * 设置订单号 积分兑换时填写
	 * 
	 * @param orderNo 订单号 积分兑换时填写
	 * @return 当前对象
	 */
    public Coupon orderNo(String orderNo) {
    	this.orderNo = orderNo;
    	return this;
    }
    
    @Override
	public String getUseOrderNo() {
    	return useOrderNo;
    }

    /**
	 * 设置【使用订单号】订单号 下单使用时填写
	 * 
	 * @param useOrderNo 【使用订单号】订单号 下单使用时填写
	 * @return 当前对象
	 */
    public Coupon useOrderNo(String useOrderNo) {
    	this.useOrderNo = useOrderNo;
    	return this;
    }
}
